package chapter02;

public class GenerateMatrix59 {
    /**
     * 矩阵框架滚动
     * 每次选择一个矩阵框架左上角 右下角
     * 循环条件：左上角<=右下角
     *          左上角++ 右下角--
     * 框架滚动以四角为起始点滚动 特别判断左上角与右下角重合情况
     */
    int[][] matrix;
    int num=1;
    public int[][] generateMatrix(int n) {
        matrix=new int[n][n];
        int start=0;
        int end=n-1;
        while (start<=end){
            process(start++,end--);
        }
        return matrix;
    }

    public void process(int start,int end){
        if(start==end){
            matrix[start][start]=num++;
            return;
        }
        for(int j=0;j<end-start;j++){
            matrix[start][start+j]=num++;
        }
        for(int i=0;i<end-start;i++){
            matrix[start+i][end]=num++;
        }
        for(int j=0;j<end-start;j++){
            matrix[end][end-j]=num++;
        }
        for(int i=0;i<end-start;i++){
            matrix[end-i][start]=num++;
        }
    }
}
